﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Kaskelot.SP.Model.Client;
using Stockholm.SOA.Kaskelot.WCF.DataContracts;
using Kaskelot.SP.Core;
using Kaskelot.SP.Model.Client.Forms;
using Microsoft.SharePoint;

namespace Kaskelot.SP.Services.Client.Mapping
{
	public static class ClientByggnadHandelseLoggExtensions
	{
		public static ClientByggnadHandelseLogg ToClientContract(this ByggnadHandelseLogg entity)
		{
			ClientByggnadHandelseLogg b = new ClientByggnadHandelseLogg();

			CopyFromEntity(entity, b, false);

			return b;
		}

		public static ClientByggnadHandelseLogg ToMinimalClientContract(this ByggnadHandelseLogg entity)
		{
			ClientByggnadHandelseLogg b = new ClientByggnadHandelseLogg();

			CopyFromEntity(entity, b, true);

			return b;
		}

		public static ByggnadHandelseLogg ToContract(this ClientByggnadHandelseLogg b)
		{
			ByggnadHandelseLogg entity = new ByggnadHandelseLogg();

			CopyToEntity(b, entity);

			return entity;
		}

		public static ByggnadHandelseLogg UpdateContract(this ByggnadHandelseLogg bhl, HandelseLoggForm form)
		{
			if (bhl.Id == Guid.Empty)
				bhl.Id = Guid.NewGuid();

			bhl.AtgardKravs = form.AtgardKravs;
			bhl.Text = form.Text;
			bhl.Datum = DateTime.Parse(form.Datum);

			bhl.ByggnadId = new Guid(form.ParentId);

			bhl.Andrad = DateTime.Now;
			bhl.AndradAv = SPContext.Current.Web.CurrentUser.Name;

			return bhl;
		}

		private static void CopyFromEntity(ByggnadHandelseLogg from, ClientByggnadHandelseLogg to, bool minimal)
		{
			to.Id = from.Id;
			to.ValId = from.ValId;

			to.ByggnadId = from.ByggnadId;
			to.Text = from.Text;
			to.AtgardKravs = from.AtgardKravs.ToJaNej();
			to.Datum = from.Datum.ToString("yyyy-MM-dd");

			to.Andrad = from.Andrad.ToString(String.Empty);
			to.AndradAv = from.AndradAv;
			to.Skapad = from.Skapad.ToShortDateString();
			to.SkapadAv = from.SkapadAv;
		}

		private static void CopyToEntity(ClientByggnadHandelseLogg from, ByggnadHandelseLogg to)
		{
			to.Id = from.Id;
			to.ValId = from.ValId;

			to.ByggnadId = from.ByggnadId;
			to.Text = from.Text;
			to.AtgardKravs = from.AtgardKravs.FromJaNej();
			to.Datum = DateTime.Parse(from.Datum);

			to.Andrad = DateTime.Parse(from.Andrad);
			to.AndradAv = from.AndradAv;
			to.Skapad = DateTime.Parse(from.Skapad);
			to.SkapadAv = from.SkapadAv;
		}
	}
}
